package com.day07;

/**
 * 面向对象的特征一: 封装和隐藏
 *
 *
 * 2.封装性的体现:
 *  我们将类的属性xxx私有化(private),同时，提供公共的(public)方法来获取(getXxx)和设置(setXxx)
 *
 *
 *  拓展: 封装性的体现: (1)如上 (2)不对外暴露的私有方法 (3)单例模式
 *
 *
 *  三.四种权限修饰符的理解，封装性的体现，需要权限修饰符来配合。
 *  从小到大排列:
 *      private,缺省，protected,public置于类的成员定义前，用来限定对象对该类成员的访问权限。
 *      具体的来说，可以修饰:属性，方法，构造器，内部类
 *      private 只能在类内部调用
 *      缺省(default) : 只能在类内部和同一个包下调用，子类也不能调用。
 *      protected: 只能在类内部，同一个包下调用，子类也可以调用。
 *      public: 任何地方都可以调用
 *
 *  对类的权限修饰符只有public和缺省(default)。
 *  public 类可以在任意地方被访问。
 *  default类只可以被同一个包内部类访问。
 */
public class AnimalTest {

    public static void main(String[] args) {
        Animal a = new Animal();
        a.name = "xuehu";
        a.age = 12;
        a.setLegs(2);

        a.show();

    }


}

class Animal {

    String name;
    int age;
    private int legs;

    //对属性的设置
    public void setLegs(int legs) {
        if (legs >= 0 && legs % 2 == 0) {
            this.legs = legs;
        } else {
            return;
        }

    }


    //对属性的获取
    public int getLegs() {
        return legs;
    }

    public void eat() {
        System.out.println("动物进食");
    }

    public void show() {
        System.out.println("name = " + name + ",age = " + age + ", legs = " + legs);
    }


}
